iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
生成式 AI

LLM 應用、開發框架、RAG優化及評估方法 系列 第 19

Day19 GAI爆炸時代 - MongoDB Atlas 介紹

  • 分享至 

  • xImage
  •  

1. 什麼是 MongoDB Atlas?

MongoDB Atlas 是一個雲端平台,允許開發人員和企業在多個雲端服務提供商(如 AWS、Google Cloud、Azure)上部署、管理和擴展 MongoDB 資料庫。它提供自動化的運維功能,如備份、監控、擴展和修補,從而減少了手動操作的需求。

2. 主要特點

  • 全托管服務

    • Atlas 是一個全托管的資料庫服務,意味著 MongoDB, Inc. 會處理所有的基礎設施管理工作,包括硬體設置、網絡配置、資料庫升級和補丁等。
  • 跨雲支援

    • Atlas 支援多個主要的雲端服務提供商,包括 Amazon Web Services (AWS)、Google Cloud Platform (GCP) 和 Microsoft Azure。用戶可以選擇在任何一個或多個雲平台上運行他們的資料庫,並且可以在不同的雲提供商之間進行資料複製和備援。
  • 自動擴展

    • Atlas 提供自動擴展功能,根據應用程序的需求動態調整計算資源和存儲容量。這包括垂直擴展(增加計算資源)和水平擴展(增加節點來分散負載)。
  • 備份和還原

    • Atlas 內建自動備份功能,用戶可以輕鬆設置備份策略,並在需要時快速還原資料。這對於災難恢復和數據保護非常重要。
  • 安全性

    • Atlas 提供企業級的安全性功能,包括網絡隔離、加密(靜態和傳輸中的數據加密)、角色基於訪問控制(RBAC),以及符合多種合規性標準(如 GDPR、HIPAA、SOC 2、ISO 27001)。
  • 監控和告警

    • Atlas 提供詳細的監控和告警功能,允許用戶實時查看資料庫的性能指標,如 CPU 使用率、內存使用率、查詢性能等。用戶可以設置自定義告警來通知異常情況。
  • 全文檢索和向量搜尋

    • Atlas 支援強大的全文檢索功能,並且最近還增加了向量搜尋功能,這使得它能夠在處理自然語言處理(NLP)和語義搜尋場景時表現出色。
  • 全球部署和多區域複製

    • 用戶可以將資料庫部署在多個地區,並設置多區域資料複製來提高數據可用性和容錯能力。

3. 使用場景

  • 雲端應用程式

    • Atlas 非常適合需要高可用性和可擴展性的雲端應用程式。它的自動擴展和多區域部署特性允許應用程序在全球範圍內平穩運行。
  • 大數據和分析

    • Atlas 的強大聚合框架和全文檢索功能使其成為大數據分析的理想選擇。開發者可以在 MongoDB 中直接進行複雜的數據查詢和分析,而無需將數據導出到其他工具。
  • 物聯網(IoT)

    • 由於 MongoDB 的靈活資料結構和高效查詢能力,Atlas 非常適合處理物聯網設備生成的大量非結構化數據。
  • 內容管理系統(CMS)

    • MongoDB 的文檔模型非常適合存儲和管理非結構化數據,如文章、圖片、視頻等,這使得 Atlas 成為 CMS 應用的理想資料庫。

介紹了這麼多,那我要如何用python去跟他串接呢?
答案是可以透過pymongo,但這邊因為我們要實作日後的RAG,所以主要會使用LangChain此框架
去跟MongoDB Atlas做串接,現在就讓我來介紹一下如何串接吧!

LangChain 串接 MongoDB Atlas 方式

  1. 辦一個Atlas 帳號,並創建一個project
    https://ithelp.ithome.com.tw/upload/images/20240817/20168537Q8ml8wF95J.png

  2. 設定好相關資訊後,點擊connect,即可取得endpoint
    https://ithelp.ithome.com.tw/upload/images/20240817/20168537TGEye4RZrO.png

記得在中填入你的密碼

  1. 開啟MongoDB Compass 在connection中,輸入剛才endpoint資訊 即可連線

https://ithelp.ithome.com.tw/upload/images/20240817/20168537kTIVXAKG4A.png

實作RAG : LangChain 與 MongoDB Atlas 串接

  1. 先建立好與資料庫的連線
from pymongo import MongoClient       # MongoClient 類是用來連接 MongoDB 資料庫的核心工具,可以與 MongoDB 進行交互,如連接到資料庫、查詢和插入數據等

mongo_client = MongoClient("mongodb+srv://drose01rrr:yifan0802@cluster0.limprfz.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0")
collection = mongo_client["mydatabase"]["mycollection"] # 從 mongo_client 中選擇指定的資料庫和集合,此集合將用存儲和查詢數據
  1. 匯入資料與切割
from langchain_community.document_loaders import PyPDFLoader # 載入PDF檔,並以頁為單位進行分割
from rich import print as pprint

loader = PyPDFLoader(file_path='https://ppt.cc/f9nc5x',extract_images=False) # 若PDF中含有圖片,則設為True
docs = loader.load()

# 切割檔案
text_splitter = RecursiveCharacterTextSplitter(separators=[' \n'],chunk_size=10,chunk_overlap=2)
chunks = text_splitter.split_documents(docs)
pprint(chunks[3:6])

https://ithelp.ithome.com.tw/upload/images/20240817/20168537FWyKMHqF2w.png

  1. 將資料寫入MongoDB
# 計算嵌入並插入文件到 MongoDB
for chunk in chunks[3:5]:
    embedding = embedding_model.embed_documents([chunk.page_content])[0] # 調用embedding_model 的 embed_documents 方法,對 chunk 中的 page_content (包含文本內容的字符串) 進行嵌入計算
    document_data = {   # 創建一個新的字典, 目的:準備一個可以插入 MongoDB 的文檔格式
        "text": chunk.page_content,
        "embedding": embedding,
        "source": chunk.metadata['source'],
        'page':chunk.metadata['page']
    }
    collection.insert_one(document_data)  # 這行代碼將 document_data 插入到 MongoDB 的集合中(將處理過的 chunk(包含嵌入向量)存儲到 MongoDB 中)

https://ithelp.ithome.com.tw/upload/images/20240817/20168537AD0HbQQnBB.png

  1. 使用Atlas search 先創建好search index

必須先來到官網建立好search規則

https://ithelp.ithome.com.tw/upload/images/20240817/20168537PAeNOR0H7J.png

選擇要的search方式
(這邊用vector search為例,所以選擇Json Editor)

https://ithelp.ithome.com.tw/upload/images/20240817/2016853747lnf6oVrH.png

選擇要得Database和collection,讓search規則適用於此

https://ithelp.ithome.com.tw/upload/images/20240817/20168537fLBpPSlUz4.png

設定好規則後
https://ithelp.ithome.com.tw/upload/images/20240817/20168537lbqVLNDhb4.png

https://ithelp.ithome.com.tw/upload/images/20240817/20168537CJGaBhv3lS.png

https://ithelp.ithome.com.tw/upload/images/20240817/20168537fxzeKZuFIv.png

可利用一個範例來檢查模型維度

  1. 使用embedding search進行cosine_similarity
from langchain_community.vectorstores import MongoDBAtlasVectorSearch # 允許使用嵌入向量來實現 MongoDB Atlas 上的相似性搜索

vectorstore = MongoDBAtlasVectorSearch(  # 初始化 MongoDBAtlasVectorSearch 實例,以便進行向量搜索操作
  collection=collection, # 指定用於存儲和檢索文檔的 MongoDB 集合對象。已經連接到 MongoDB Atlas 資料庫
  embedding=embedding_model,  # 指定用於生成嵌入向量的嵌入模型對象,用於將文本轉換成向量表示
  index_name="vector_index",  # 指定search index的名稱。這個索引用於加速向量搜索操作 (要先在Atlas search額外定義好)
  relevance_score_fn="cosine", # 指定用於計算相似度的函數。這裡使用的是餘弦相似度(cosine similarity)來衡量向量之間的相似性
)
    
pprint(vectorstore.search(query='路口安全',search_type='similarity',kwargs=2))

https://ithelp.ithome.com.tw/upload/images/20240817/20168537Ar9sGsw2Ka.png

以上就是MongoDB Atlas介紹,接下來就要開始進入RAG的部分囉!


上一篇
Day18 GAI爆炸時代 - 市面上 Vector DB 比較
下一篇
Day20 GAI爆炸時代 - LangChain Retriever介紹
系列文
LLM 應用、開發框架、RAG優化及評估方法 26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言